
package Controlador;
import Modelo.*;
import java.util.ArrayList;

final public class Factory 
{
    private ArrayList<Paciente> Pacientes;
    private ArrayList<Medico> Medicos;
    private ArrayList<Medicamento> Medicamentos;
    private ArrayList<Usuario> Usuarios;
    private Archivo archivoPacientes=new Archivo("Pacientes.txt");
    private Archivo archivoMedicos=new Archivo("Medicos.txt");;
    private Archivo archivoMedicamentos=new Archivo("Medicamentos.txt");
    private Archivo archivoUsuarios = new Archivo("Usuarios.txt");
    
    
    private Factory() 
    {
        if(archivoPacientes.leer()!=null)
            Pacientes=(ArrayList<Paciente>)archivoPacientes.leer();
        else
            Pacientes=new ArrayList<Paciente>();
        
        if(archivoMedicos.leer()!=null)
            Medicos=(ArrayList<Medico>)archivoMedicos.leer();
        else
            Medicos=new ArrayList<Medico>();
        if(archivoMedicamentos.leer()!=null)
            Medicamentos=(ArrayList<Medicamento>)archivoMedicamentos.leer();
        else
            Medicamentos=new ArrayList<Medicamento>();
        if(archivoUsuarios.leer()!=null)
            Usuarios=(ArrayList<Usuario>)archivoUsuarios.leer();
        else
            Usuarios=new ArrayList<Usuario>();
    }
    
    public static Factory getInstance() 
    {
        return FactoryHolder.INSTANCE;
    }
    
    private static class FactoryHolder 
    {

        private static final Factory INSTANCE = new Factory();
    }
    
    /*GETTERS Y SETTERS*/
    public ArrayList<Paciente> getPacientes() {
        return Pacientes;
    }

    public void setPacientes(ArrayList<Paciente> Pacientes) {
        this.Pacientes = Pacientes;
    }

    public ArrayList<Medico> getMedicos() {
        return Medicos;
    }

    public void setMedicos(ArrayList<Medico> Medicos) {
        this.Medicos = Medicos;
    }

    public ArrayList<Medicamento> getMedicamentos() {
        return Medicamentos;
    }

    public void setMedicamentos(ArrayList<Medicamento> Medicamentos) {
        this.Medicamentos = Medicamentos;
    }

    public Archivo getArchivoPacientes() {
        return archivoPacientes;
    }

    public void setArchivoPacientes(Archivo archivoPacientes) {
        this.archivoPacientes = archivoPacientes;
    }

    public Archivo getArchivoMedicos() {
        return archivoMedicos;
    }

    public void setArchivoMedicos(Archivo archivoMedicos) {
        this.archivoMedicos = archivoMedicos;
    }

    public Archivo getArchivoMedicamentos() {
        return archivoMedicamentos;
    }

    public void setArchivoMedicamentos(Archivo archivoMedicamentos) {
        this.archivoMedicamentos = archivoMedicamentos;
    }
    
    public ArrayList<Usuario> getUsuarios(){
        return Usuarios;
    }
    
    public void setUsuarios(ArrayList<Usuario> Users){
        this.Usuarios = Users;
    }
    
    public void crear(Object obj)
    {
        if(obj instanceof Paciente )
            Pacientes.add((Paciente)obj);
        else if(obj instanceof Medico)
            Medicos.add((Medico)obj);
        else if(obj instanceof Medicamento)
            Medicamentos.add((Medicamento)obj);
        else if(obj instanceof Usuario)
            Usuarios.add((Usuario)obj);
    }

    public boolean eliminar(Object obj)
    {
       if(obj instanceof Paciente )
            Pacientes.remove((Paciente)obj);
           //Pacientes.remove(0);
        else if(obj instanceof Medico)
            Medicos.remove((Medico)obj);
        else if(obj instanceof Medicamento)
            Medicamentos.remove((Medicamento)obj);
       else if(obj instanceof Usuario)
            Usuarios.remove((Usuario)obj);
       
       return true;
    }
   public boolean actualizar(Object obj, Object nuevo)
   {
       if(eliminar(obj)==true){
            crear(nuevo);
            return true;
       }
       else
           return false;
   }
   public Object buscar(Object obj)
   {
       if(obj instanceof Paciente )
       {
           for(int i = 0; i < Pacientes.size(); i++)
               if(Pacientes.get(i).equals(obj))
                    return Pacientes.get(i);
       }
       else if(obj instanceof Medico )
       {
           for(int i = 0; i < Medicos.size(); i++)
               if(Medicos.get(i).equals(obj))
                    return Medicos.get(i);
       }
       else if(obj instanceof Medicamento )
       {
           for(int i = 0; i < Medicamentos.size(); i++)
               if(Medicamentos.get(i).equals(obj))
                    return Medicamentos.get(i);
       } 
       return null;
   }
   public void Guardar()
   {
       archivoMedicamentos.escribir(Medicamentos);
       archivoMedicos.escribir(Medicos);
       archivoPacientes.escribir(Pacientes);
       archivoUsuarios.escribir(Usuarios);
   }
}
